iT邦幫忙

2024 iThome 鐵人賽

DAY 24
0
Security

網路安全基礎概念與實作系列 第 24

Day 24: 簡單模擬 SSL/TLS

  • 分享至 

  • xImage
  •  

今天要來透過 Python 內建的 ssl 模組來進行簡單的 SSL/TLS 實作,學習 HTTPS 加密通訊,並了解 SSL/TLS 在保護網路通信中的具體應用。

接下來我將使用 Python 內建的 ssl 模組建立一個簡單的 HTTPS 伺服器與客戶端,並進行加密通訊。

步驟 1:建立一個簡單的 HTTPS 伺服器

我使用 Python 提供的 http.server 模組來建立一個基礎的 HTTP 伺服器,並透過 ssl 模組將其升級為 HTTPS,這樣可以在本地建立一個加密的通訊通道。

import http.server
import ssl
import socketserver

# 定義一個簡單的請求處理器
class SimpleHTTPRequestHandler(http.server.SimpleHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.end_headers()
        self.wfile.write(b"Hello, this is an HTTPS connection!")

# 設置伺服器
httpd = socketserver.TCPServer(('localhost', 4443), SimpleHTTPRequestHandler)

# 包裝伺服器為 SSL,這裡不使用外部的憑證
httpd.socket = ssl.wrap_socket(httpd.socket, certfile=None, keyfile=None, server_side=True)

print("Serving on https://localhost:4443...")
httpd.serve_forever()

這段程式碼中,定義了一個簡單的 HTTP 請求處理器,並且將 HTTP 伺服器包裝為支持 SSL 的 HTTPS 伺服器,當在本地訪問 https://localhost:4443,伺服器會回傳一個加密訊息。

步驟 2:建立一個簡單的 HTTPS 客戶端

接著建立一個與上述伺服器通訊的客戶端,同樣透過 Python 內建的 ssl 模組進行 SSL/TLS 加密。

import ssl
import socket

# 創建 SSL 上下文
context = ssl.create_default_context()

# 與伺服器進行加密連接
with socket.create_connection(('localhost', 4443)) as sock:
    with context.wrap_socket(sock, server_hostname='localhost') as ssock:
        print(f"SSL established. Peer: {ssock.getpeercert()}")
        ssock.sendall(b"GET / HTTP/1.1\r\nHost: localhost\r\n\r\n")
        data = ssock.recv(1024)
        print(data.decode())

這段程式碼顯示如何建立一個簡單的客戶端,與伺服器進行加密連接並接收伺服器回傳的數據。

以上方法較適合用於學習與測試,如果要實際使用的話,要使用經過認證的 SSL 憑證,或使用更高版本的 TLS 協議。


上一篇
Day 23: SSL/TLS 加密通訊
下一篇
Day 25: 無線網路安全
系列文
網路安全基礎概念與實作26
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言